﻿using Nemerle.Collections;
using Nemerle.Text;
using Nemerle.Utility;

using System;
using System.Collections.Generic;
using System.Linq;

namespace Nemerle2.Compiler
{
  /// <summary>
  /// Описывает применение кастом-атрибута. Позволяет получить значения аргументов.
  /// </summary>
  public interface ICustomAttribute
  {
    Name                                 : string                               { get; }
    FullName                             : string                               { get; }
    Type                                 : ITypeInfo                            { get; }
    PositionalArgumentCount              : int                                  { get; }
    ArgumentValue[argIndex : int]        : CustomAttributeValue                 { get; }
    NamedArgumentValue[argName : string] : CustomAttributeValue                 { get; }
    NamedArguments                       : list[string * CustomAttributeValue]  { get; }
    PositionalArguments                  : list[CustomAttributeValue]           { get; }

    HasNamedArgument(argName : string) : bool;
  }
}
